package com.jade.bss.customer.grant;

import java.util.List;

import com.jade.bss.customer.CustomerException;

/**
 * 授权实体数据访问接口。
 *
 * @author sky
 * @version 1.0 13-4-18 上午9:43
 */
public interface GrantDao
{
    /**
     * 获取一个身份的指定类型的授权记录。
     *
     * @param principalType 身份类型
     * @param principalName 身份名称
     * @param entryType 权限实体类型
     * @return 授权记录列表
     */
    public List<GrantEntry> listGrant(String principalType, String principalName, String entryType);

    /**
     * 获取一个身份的所有授权记录。
     *
     * @param principalType 身份类型
     * @param principalName 身份名称
     * @return 授权记录列表
     */
    public List<GrantEntry> listGrant(String principalType, String principalName);

    /**
     * 获取权限实体对应的授权记录。
     *
     * @param entryType 权限实体类型
     * @param entryId 权限实体ID
     * @return 授权记录列表
     */
    public List<GrantEntry> listGrantFromEntry(String entryType, String entryId);

    /**
     * 返回指定的授权记录。
     *
     * @param principalType 身份类型
     * @param principalName 身份名称
     * @param entryType 权限实体类型
     * @param entryId 权限实体ID
     * @return 授权记录
     */
    public GrantEntry getGrant(String principalType, String principalName, String entryType, int entryId);

    /**
     * 添加一条授权记录。
     *
     * @param grant 授权记录
     * @throws CustomerException 数据操作异常
     */
    public void addGrant(GrantEntry grant)
            throws CustomerException;

    /**
     * 删除指定身份的授权记录。
     *
     * @param principalType 身份类型
     * @param principalName 身份名称
     * @param entryType 权限实体类型
     * @throws CustomerException 数据操作异常
     */
    public void removeGrant(String principalType, String principalName, String entryType)
            throws CustomerException;

    /**
     * 删除指定身份的授权记录。
     *
     * @param principalType 身份类型
     * @param principalName 身份名称
     * @param entryType 权限实体类型
     * @param entryId 权限实体ID
     * @throws CustomerException 数据操作异常
     */
    public void removeGrant(String principalType, String principalName, String entryType, int entryId)
            throws CustomerException;

    /**
     * 删除指定权限实体的授权记录。
     *
     * @param entryType 权限实体类型
     * @param entryId 权限实体ID
     * @throws CustomerException 数据操作异常
     */
    public void removeGrantFromEntry(String entryType, int entryId)
            throws CustomerException;
}
